package cn.datastruct.test;

/*
 *   递归-迷宫问题  思路
 *       1.设置一个迷宫
 *           实现：
 *               1.1、用一个二维数组，初始化全部为0，
 *               1.2、用1表示围墙、2表示已经走过的位置、3表示这个点为死点、0表示这个点没有走过
 *       2.走到指定位置，使用递归，方法为右->上->左->下
 * */
public class MiGong {
    /**
     * @param map 表示迷宫地图
     * @param i   表示所处迷宫位置
     * @param j
     */
    public static boolean setWay(int[][] map, int i, int j) {
        if (map[6][4] == 2) {//如果走过该位置，接停止递归
            return true;
        } else {//没有走过该位置
            if (map[i][j] == 0) {
                map[i][j] = 2;//赋值为2表示到达该位置
                //方法为右->上->左->下
                if (setWay(map, i, j + 1)) {//表示该点可以走通
                    return true;
                } else if (setWay(map, i + 1, j)) {
                    return true;
                } else if (setWay(map, i - 1, j)) {
                    return true;
                } else if (setWay(map, i, j - 1)) {
                    return true;
                }else {
                    map[i][j] = 3;
                    return false;
                }
            } else {//这个点不通
                return false;

            }
        }
    }

    public static int test(int n) {
        if (n == 1) {
            return n;
        }
        return test(n - 1) * n;
    }

    public static void main(String[] args) {
        //初始化二维数组
        int[][] map = new int[8][7];
        for (int i = 0; i < 7; i++) {
            map[0][i] = 1;
            map[7][i] = 1;
        }

        for (int i = 0; i < 8; i++) {
            map[i][0] = 1;
            map[i][6] = 1;
        }

        map[2][1] = 1;
        map[2][2] = 1;

        for (int[] ints : map) {
            for (int i = 0; i < ints.length; i++) {
                System.out.printf("%d\t", ints[i]);
            }
            System.out.println();
        }
        System.out.println("---------------------------");
        setWay(map, 1, 1);
        for (int[] ints : map) {
            for (int i = 0; i < ints.length; i++) {
                System.out.printf("%d\t", ints[i]);
            }
            System.out.println();
        }
    }
}
